Pinvon's Blog

所见, 所闻, 所思, 所想

Fabric 多机部署

配置

4 个 Peer 节点.

1 个 Orderer 节点.

1 台中间服务器.

准备条件

在本小节内的内容, 是 5 个节点都需要做的.

安装 Git

sudo apt install git

安装 Go

下载

安装

解压:

tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz

配置环境变量, 打开文件 .profile:

export PATH=$PATH:/usr/local/go/bin 
export GOROOT=/usr/local/go 
export GOPATH=$HOME/go 
export PATH=$PATH:$HOME/go/bin

使配置生效:

source ~/.profile

创建 GOPATH 文件夹:

mkdir -p $GOPATH

测试

go

如果能识别 go 命令, 说明安装成功.

安装 Docker

安装

wget -qO- https://get.docker.com/ | sh

修改当前用户的权限

sudo usermod -aG docker $USER

添加阿里云的 Docker Hub 镜像

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://5cr0yvyw.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

问题

若出现: sudo: unable to resolve host xxx 的情况, 是因为机器在解析这个主机名时出现了问题, 但不影响命令的执行. 如果不想看到这个问题, 则修改 /etc/hosts:

# 原有的内容
127.0.0.1 localhost

# 修改成:
127.0.0.1 localhost
127.0.0.1 xxx(主机名)

测试

输入命令:

docker

如果可以识别这个命令, 则安装成功.

安装 Docker-Compose

安装 python-pip

sudo apt install python-pip

安装 Docker-Compose

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

测试

docker-compose --version

如果给出了版本号, 则说明安装成功.

下载 Hyperledger Fabric

go get github.com/hyperledger/fabric

下载 Hyperledger Fabric 镜像文件

cd ~/go/src/github.com/hyperledger/fabric/scripts
./bootstrap.sh

将下载好的 fabric-samples 移到想要的目录:

mv fabric-samples ../../

测试

在测试之前, 进入 /etc/resolv.conf, 将 options timeout:2 attempts:3 rotate single-request-reopen 这一行内容注释. 否则测试无法通过.

进入 fabric-samples/first-network:

启动网络:

./byfn generate
./byfn up

如果正常启动, 则表示单机上没有问题.

关闭网络:

./byfn down

另外, 也可以测试 e2e-cli 的例子.

测试镜像文件:

./network_setup.sh up

如果正常启动, 则表示单机上没有问题.

关闭网络:

./network_setup.sh down

多机配置

修改主机名

/etc/hostname: 存放主机名

/etc/hosts: 存放的是域名与 ip 的对应关系.

因此, 这边需要修改的是 /etc/hostname. 打开后将新的主机名替换现有的主机名, 保存后重启即可.

Orderer 节点的主机名改成: orderer.example.com Peer0 节点的主机名改成: peer0.org1.example.com Peer1 节点的主机名改成: peer1.org1.example.com Peer2 节点的主机名改成: peer0.org2.example.com Peer3 节点的主机名改成: peer1.org2.example.com

以 Orderer 节点为例:

编辑 /etc/hostname 文件, 将文件的内容改成如下:

orderer.example.com

编辑 /etc/hosts 文件, 增加 IP 到 域名 的映射:

127.0.0.1 orderer.example.com
172.17.xx.xx peer0.org1.example.com
172.17.xx.xx peer1.org1.example.com
172.17.xx.xx peer0.org2.example.com
172.17.xx.xx peer1.org2.example.com

保存后重启.

使用脚本生成必要文件

在 orderer.example.com 节点上, 进入 first-network 目录.

执行命令:

./byfn.sh generate

该命令生成的文件:

  1. channel-artifacts 里面包含了与 mychannel 通道相关的文件.
  2. crypto-config 文件里包含了各个节点的公钥, 私钥和证书的信息.

编辑 docker-compose 文件

docker-compose-orderer.yaml

编辑 docker-compose-orderer.yaml 文件:

version: '2'

volumes:
  orderer.example.com:

networks:
  byfn:

services:
  orderer.example.com:
    extends:
      file:   base/docker-compose-base.yaml
      service: orderer.example.com
    container_name: orderer.example.com
    networks:
      - byfn

共识类型使用的是 Solo, 详细的配置信息在 docker-compose-base.yaml 文件里.

docker-compose-peer.yaml

version: '2'

volumes:
  peer0.org1.example.com:

networks:
  byfn:

services:
  peer0.org1.example.com:
    container_name: peer0.org1.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.org1.example.com
    networks:
      - byfn
    extra_hosts:
      - "orderer.example.com:172.17.90.60"
      - "peer1.org1.example.com:172.17.9.56"
      - "peer0.org2.example.com:172.17.190.162"
      - "peer1.org2.example.com:172.17.9.58"

  cli:
    container_name: cli
    image: hyperledger/fabric-tools:$IMAGE_TAG
    tty: true
    stdin_open: true
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      #- CORE_LOGGING_LEVEL=DEBUG
      - CORE_LOGGING_LEVEL=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
    volumes:
        - /var/run/:/host/var/run/
        - ./../chaincode/:/opt/gopath/src/github.com/chaincode
        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
        - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    depends_on:
      - peer0.org1.example.com
    extra_hosts:
      - "orderer.example.com:172.17.90.60"
      - "peer0.org1.example.com:172.17.9.57"
      - "peer1.org1.example.com:172.17.9.56"
      - "peer0.org2.example.com:172.17.190.162"
      - "peer1.org2.example.com:172.17.9.58"
    networks:
      - byfn

base/docker-compose-base.yaml

将所有端口都映射到 7051 和 7053 (如 8051, 9051 等都改成 7051). 不过, 如果一台主机运行多个节点, 则不能这么改.

分发配置文件

将配置文件分发到每一个主机上:

scp -r first-network root@172.17.9.57:~/go/src/github.com/hyperledger/fabric-samples

启动节点

到每个节点上启动与该节点相应的容器:

docker-compose -f docker-compose-orderer.yaml up -d

最后进入 cli:

docker exec -it cli bash
./scripts/script.sh mychannel

Comments

使用 Disqus 评论
comments powered by Disqus